Cyclic-redundancy-check (“CRC”) codes have been employed since the 1960s for detecting errors in transmitted data and data that is stored on, and retrieved from, data-storage devices. In general, CRC codes can be used to determine whether data has changed as a result of any types of operations performed on the data or as a result of the passage of time. Prior to transmission or storing a block of data, a CRC code is computed for the data and the CRC code is included in the data. Following transmission of the data or retrieval of the data from a storage device, the CRC code is recomputed and compared with the CRC code included in the data. When the CRC code included in the data is identical to the recomputed CRC code, there is a relatively high probability that the data has not been corrupted by transmission or storage. There is a low probability that, despite the CRC code included in the data matching the recomputed CRC code, data corruption undetectable by the CRC method has occurred. The probability of undetected data corruption can be decreased by increasing the length of the computed CRC code and/or by using more effective CRC-code-generation methods, including using a more effective CRC polynomial, discussed below.
Initially, CRC codes were computed by programs or routines, including by low-level operating-system routines. However, as the bandwidths of electronic communications technologies have increased, CRC-code computation is now moving to hardware-implemented CRC-code-computation logic, which can generally compute CRC codes more quickly and efficiently than computer programs or routines, in part by employing parallel computation. However, with ever increasing electronic-communications bandwidths, the width of the fundamental unit of data, or word length, for which CRC codes are computed has also increased, resulting in a correspondingly dramatic increase in the number of circuit components, including transistors, needed to implement CRC-code-computation logic. These increases result in increasingly costly CRC-code-computation circuits and may result in slower CRC-code computation. For these reasons, designers, manufacturers, vendors, and users of CRC-code-computation logic continue to seek more efficient implementations in order to continue to track the rapid evolution of electronic communications and computational systems.